tg-me.com/Python_Community_ru/2589
Last Update:
🖥 Задача (с подвохом). Какой результат выдаст этот код?
def extend_list(val, lst=[]):
lst.append(val)
return lst
# Первый вызов: используется список по умолчанию
list1 = extend_list(10)
# Второй вызов: передаём новый пустой список
list2 = extend_list(123, [])
# Третий вызов: снова используется список по умолчанию
list3 = extend_list('a')
print('list1 =', list1)
print('list2 =', list2)
print('list3 =', list3)
🧩 Объяснение
Как работает список по умолчанию
В объявлении функции lst=[] создаётся один список при определении функции, и он используется повторно во всех вызовах, где аргумент lst не передан.
Первый вызов
list1 = extend_list(10)
Параметр lst не передан → используется дефолтный список.
Добавляем 10.
В результате list1 становится [10].
Второй вызов
list2 = extend_list(123, [])
Передаём новый пустой список [].
В этот список добавляется 123.
В итоге list2 становится [123].
Третий вызов
list3 = extend_list('a')
Опять не передан lst → используется тот же дефолтный список, в который уже добавлен 10.
Добавляем 'a'.
Дефолтный список теперь [10, 'a'], и list3 ссылается на этот же список.
Окончательный вывод программы:
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
Обратите внимание, что list1 и list3 — это один и тот же дефолтный список, поэтому изменения сохраняются между вызовами.
@Python_Community_ru
BY Python Community

Share with your friend now:
tg-me.com/Python_Community_ru/2589